//
//  YSPhotoViiew.swift
//  新浪浪
//
//  Created by mac on 16/3/8.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
/*

视图功能
视图三部曲
数据源方法 设置一些属性 itemsize
定义一个数组 来存放图片
自定义cell 刷新数据 展示图片
删除按钮
添加按钮功能
*/

/*
***********************  定义常用到的变量

*/

let YSPhotoViewMargin: CGFloat = 10
let YSPhothItemMargin: CGFloat = 5
let YSPhotoViewReuseIdentifier = "YSPhotoViewReuseIdentifier"

/*

协议 定义一个协议 声明代理方法 声明一个代理属性 遵守协议 设置代理对象 实现代理方法

*/

protocol YSPhotoCollectionViewCellDelegate:NSObjectProtocol{
    func didRemoveIndexImage(index:Int)
}



/*
***********************  类的起始点

*/
class YSPhotoViiew: UICollectionView,UICollectionViewDataSource,YSPhotoCollectionViewCellDelegate,UICollectionViewDelegate {

  
    /*
    ***********************   //闭包属性
    
    */
    var closure: (()->())?
    
    
    
    /*
    ***********************   //定义一个数组来存放图片
    //私有的
    
    */
    private lazy var images:[UIImage] = [UIImage]()
    
    /*
    ***********************  布局格式 flowLayout
    
    */
    
    var flowLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    
    /*
    ***********************  布局格式 flowLayout
    
    */
    
    /*
    ***********************  三部曲
    
    */
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        
        super.init(frame: frame, collectionViewLayout: flowLayout)
        
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    
    
    private func setupUI(){
        
        backgroundColor = UIColor.darkGrayColor()
        //设置数据源代理
        dataSource = self
        delegate = self
        
        //注册cell
        registerClass(YSPhotoCollectionViewCell.self, forCellWithReuseIdentifier: YSPhotoViewReuseIdentifier)
        
        //设置布局属性
        let IlemWH = (UIScreen.mainScreen().bounds.width - 2 * YSPhotoViewMargin)/3
        flowLayout.itemSize = CGSizeMake(ItemWH, ItemWH)
        flowLayout.minimumInteritemSpacing = YSPhothItemMargin
        flowLayout.minimumLineSpacing = YSPhothItemMargin
        
        
    }
    /*
    ***********************  三部曲 over
    
    */
    
    
    
    
    //MARK:--对外公开一个方法添加照片
    func addImage(image:UIImage){
        images.append(image)
        reloadData()
    }
    
    //销毁时调用测试循环引用
    deinit{
        print("photoView 88")
    }
    
    //MARK: -- 懒加载
    
}

extension YSPhotoViiew{
    //cell数量
    
    /*
    ***********************  数据源方法  1⃣️
    
    */
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        //特殊情况 不显示加号按钮
        if images.count == 0 || images.count == 9{
            return images.count
        }else {
            return images.count + 1
        }
    }
    
    
    /*
    *********************** 数据源方法 2⃣️
    
    */
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(YSPhotoViewReuseIdentifier, forIndexPath: indexPath)as! YSPhotoCollectionViewCell
        
        if indexPath.item >= images.count {
            //越界 赋值为nil 让他去实现didSet方法
            cell.iconImage = nil

        } else {
            cell.iconImage = images[indexPath.item]
        }
//        cell.backgroundColor = UIColor.redColor()
        return cell
    }
    
        /*
 ** **  **  **** **** **  ****  ***  数据源方法  over

        */

    
    /*
    ***********************  协议删除图片方法  并刷新
    
    */
    
    func didRemoveIndexImage(index: Int) {
        //删除指定的图片
        images.removeAtIndex(index)
        //刷新数据
        reloadData()
    }
    
    
    /*
    ***********************  delegate 代理方法
    
    */
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        
        //必须得是最后一个item点击的时候,再调用
        if indexPath.item == images.count {
            print("选择图片")
            //需要控制器去调用一下他自己的方法
            
            closure?()
            
        }
    }
}

/********************+++++++++++*********

        自定义cell
***************+++++++++++*********************/
//继承自 UICollectionViewCell
class YSPhotoCollectionViewCell: UICollectionViewCell{
    
    //设置代理属性
    weak var delegate: YSPhotoCollectionViewCellDelegate?
    
    //定义一个属性
    var indexPath: NSIndexPath?
    
    //定义一个模型
    var iconImage: UIImage?{
        //didSet  赋值之后  就会走里面
        didSet{
            if iconImage == nil {
                //显示加号
                deleteButton.hidden = true
                iconImageView.image = UIImage (named: "compose_pic_add")
                
            }else {
                //赋值
                iconImageView.image = iconImage
               deleteButton.hidden = false
            }
        }
    }
    
    /*
    ***********************  三部曲
    
    */
    
    
    override init(frame: CGRect) {
        super.init(frame:frame)
        setupUI()
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setupUI(){
        contentView.addSubview(iconImageView)
        iconImageView.frame = contentView.bounds
    }
    
    @objc private func click(){
        print("删除")
        if let index = indexPath?.item{
          delegate?.didRemoveIndexImage(index)
        }
    }
    
    //  懒加载
    private lazy var iconImageView:UIImageView = UIImageView()
    
    //删除按钮
    private lazy var deleteButton: UIButton = {
        let btn = UIButton(type: .Custom)
        
        btn.setImage(UIImage (named: "compose_card_delete"), forState: UIControlState.Normal)
        btn.setImage(UIImage (named: "compose_card_delete_highlighted"), forState: UIControlState.Highlighted)
        btn.sizeToFit()
        btn.addTarget(self, action: "click", forControlEvents: UIControlEvents.TouchUpInside)
        
        
        return btn
        
    }()
    
}


























